#include <iostream>
using namespace std;

class Person
{
public:
	string _name; // 姓名
};

//这样会有数据冗余
//class Student : public Person
//{
//protected:
//	int _num; //学号
//};
//
//class Teacher : public Person
//{
//protected:
//	int _id; // 职工编号
//};

// 虚拟继承 ———————————— （在接受同一个信息的两个子类上进行虚拟继承）
class Student : virtual public Person
{
protected:
	int _num; //学号
};
class Teacher : virtual public Person
{
protected:
	int _id; // 职工编号
};


class Assistant : public Student, public Teacher
{
protected:
	string _majorCourse; // 主修课程
};

int main()
{
	// 这样会有二义性无法明确知道访问的是哪一个
	Assistant a;
	//不虚继承就会有二义性和数据冗余
	a._name = "peter"; 
	// 需要显示指定访问哪个父类的成员可以解决二义性问题，但是数据冗余问题无法解决，因此需要虚继承
	a.Student::_name = "xxx";
	a.Teacher::_name = "yyy";

	return 0;
}

